#pragma GCC optimize(2)
#include <iostream>
#include <math.h>
#include <map>
#include <vector>
#include <map>
using namespace std;
map<int, int> memory; // 使用map进行记录
long long int result;
int test(long long int n)
{
    auto id = memory.find(n); // 如果找到了key为n的记录，则会返回其索引
    if (id != memory.end())   // 没找到就会返回end（）
    {
        return id->second; // 返回value
    }
    if (n == 1)
    {
        memory.insert(pair<int, int>(n, 1));
        return 1;
    }
    if (n == 2)
    {
        memory.insert(pair<int, int>(n, 2));
        return 2;
    }
    if (n == 3)
    {
        memory.insert(pair<int, int>(n, 4));
        return 4;
    }
    result = test(n - 1) + test(n - 2)+test(n-3);
    memory.insert(pair<int, int>(n, result)); // 新的结果添加进map备忘录
    return result;
}

int main()
{
    long long int n;
    vector<int> res;
    while (cin >> n, n != 0)
    {
        cout << test(n) << endl;
    }
    return 0;
}